/******************************************************************************* * Copyright (c) 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.ui.tests.commands; import org.eclipse.core.commands.Command; import org.eclipse.core.commands.Parameterization; import org.eclipse.core.commands.ParameterizedCommand; import org.eclipse.core.commands.State; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.commands.ICommandService; import org.eclipse.ui.commands.IElementReference; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.handlers.RadioState; import org.eclipse.ui.menus.UIElement; import org.eclipse.ui.services.IServiceLocator; import org.eclipse.ui.tests.harness.util.UITestCase; /** * @since 3.5 * @author Prakash G.R. * */ public class RadioStateTest extends UITestCase { private ICommandService commandService; private IHandlerService handlerService; public RadioStateTest(String testName) { super(testName); } @Override protected void doSetUp() throws Exception { super.doSetUp(); commandService = fWorkbench .getService(ICommandService.class); handlerService = fWorkbench .getService(IHandlerService.class); } public void testRadioValues() throws Exception { Command command1 = commandService .getCommand("org.eclipse.ui.tests.radioStateCommand1"); // check the initial values assertState(command1, "value2"); // execute with value1 Parameterization radioParam = new Parameterization(command1 .getParameter(RadioState.PARAMETER_ID), "value1"); ParameterizedCommand parameterizedCommand = new ParameterizedCommand( command1, new Parameterization[] { radioParam }); handlerService.executeCommand(parameterizedCommand, null); // check if updated assertState(command1, "value1"); handlerService.executeCommand(parameterizedCommand, null); assertState(command1, "value1"); Parameterization radioParam2 = new Parameterization(command1 .getParameter(RadioState.PARAMETER_ID), "value2"); ParameterizedCommand parameterizedCommand2 = new ParameterizedCommand( command1, new Parameterization[] { radioParam2 }); handlerService.executeCommand(parameterizedCommand2, null); assertState(command1, "value2"); } static class MyUIElement extends UIElement{ private boolean checked; protected MyUIElement(IServiceLocator serviceLocator){ super(serviceLocator); } @Override public void setDisabledIcon(ImageDescriptor desc) {} @Override public void setHoverIcon(ImageDescriptor desc) {} @Override public void setIcon(ImageDescriptor desc) {} @Override public void setText(String text) {} @Override public void setTooltip(String text) {} @Override public void setChecked(boolean checked) { this.checked = checked; } public boolean isChecked() { return checked; } } MyUIElement element1a; MyUIElement element2a; MyUIElement element3a; MyUIElement element1b; MyUIElement element2b; MyUIElement element3b; public void testMultipleContributions() throws Exception{ Command command1 = commandService.getCommand("org.eclipse.ui.tests.radioStateCommand1"); // group 1 Parameterization radioParam1a = new Parameterization(command1.getParameter(RadioState.PARAMETER_ID), "value1"); ParameterizedCommand parameterizedCommand1a = new ParameterizedCommand(command1, new Parameterization[] { radioParam1a }); Parameterization radioParam2a = new Parameterization(command1.getParameter(RadioState.PARAMETER_ID), "value2"); ParameterizedCommand parameterizedCommand2a = new ParameterizedCommand(command1, new Parameterization[] { radioParam2a }); Parameterization radioParam3a = new Parameterization(command1.getParameter(RadioState.PARAMETER_ID), "value3"); ParameterizedCommand parameterizedCommand3a = new ParameterizedCommand(command1, new Parameterization[] { radioParam3a }); element1a = new MyUIElement(fWorkbench); element2a = new MyUIElement(fWorkbench); element3a = new MyUIElement(fWorkbench); IElementReference reference1a = commandService.registerElementForCommand(parameterizedCommand1a, element1a); IElementReference reference2a = commandService.registerElementForCommand(parameterizedCommand2a, element2a); IElementReference reference3a = commandService.registerElementForCommand(parameterizedCommand3a, element3a); // group 2 Parameterization radioParam1b = new Parameterization(command1.getParameter(RadioState.PARAMETER_ID), "value1"); ParameterizedCommand parameterizedCommand1b = new ParameterizedCommand(command1, new Parameterization[] { radioParam1b }); Parameterization radioParam2b = new Parameterization(command1.getParameter(RadioState.PARAMETER_ID), "value2"); ParameterizedCommand parameterizedCommand2b = new ParameterizedCommand(command1, new Parameterization[] { radioParam2b }); Parameterization radioParam3b = new Parameterization(command1.getParameter(RadioState.PARAMETER_ID), "value3"); ParameterizedCommand parameterizedCommand3b = new ParameterizedCommand(command1, new Parameterization[] { radioParam3b }); element1b = new MyUIElement(fWorkbench); element2b = new MyUIElement(fWorkbench); element3b = new MyUIElement(fWorkbench); IElementReference reference1b = commandService.registerElementForCommand(parameterizedCommand1b, element1b); IElementReference reference2b = commandService.registerElementForCommand(parameterizedCommand2b, element2b); IElementReference reference3b = commandService.registerElementForCommand(parameterizedCommand3b, element3b); try{ // first set the state to value1 handlerService.executeCommand(parameterizedCommand1a, null); commandService.refreshElements(command1.getId(), null); assertChecked(element1a); assertBothGroupsUpdated(); // then set the state to value2 handlerService.executeCommand(parameterizedCommand2a, null); // only value 2 is checked assertChecked(element2a); assertBothGroupsUpdated(); }finally { commandService.unregisterElement(reference1a); commandService.unregisterElement(reference2a); commandService.unregisterElement(reference3a); commandService.unregisterElement(reference1b); commandService.unregisterElement(reference2b); commandService.unregisterElement(reference3b); } } private void assertChecked(MyUIElement checkedElement) { // only the element passed is checked and other two should be unchecked assertTrue(checkedElement == element1a? element1a.isChecked():!element1a.isChecked()); assertTrue(checkedElement == element2a? element2a.isChecked():!element2a.isChecked()); assertTrue(checkedElement == element3a? element3a.isChecked():!element3a.isChecked()); } private void assertBothGroupsUpdated() { assertEquals(element1a.isChecked(), element1b.isChecked()); assertEquals(element2a.isChecked(), element2b.isChecked()); assertEquals(element3a.isChecked(), element3b.isChecked()); } private void assertState(Command command, String expectedValue) { State state = command.getState(RadioState.STATE_ID); Object value = state.getValue(); assertTrue(value instanceof String); assertEquals(expectedValue, value); } }